package com.software.car.api;

import com.software.car.common.utils.CommonPage;
import com.software.car.entity.dto.*;
import com.software.car.entity.vo.UserDetailVo;
import com.software.car.entity.po.UserPo;

import java.util.List;

/**
 *
 * 用户管理Service
 *
 * @Author 魔法はまだ解けない
 * @Date 2021/1/23
 */
public interface UserService {

    /**
     * 获取所有用户信息
     * @param state 状态，null即获取所有
     * @return
     */
     List<UserDetailVo> getAllUserResponse(int state);

    /**
     * 管理员调用
     * 获取分页后的用户列表
     * @param page  页号
     * @param pageSize  页大小
     * @return
     */
    CommonPage getUsersByPage(Integer page, Integer pageSize,Integer state,String query,Integer role);

    /**
     * 通过用户id获取用户
     * @param id
     * @return
     */
    UserDetailVo getUser(String id);

    /**
     * 通过用户id获取用户详细信息
     * @param id
     * @return
     */
    UserPo getUserPo(String id);

    /**
     * 登陆调用
     * 通过账号密码获取用户信息
     * @param webLoginDto
     * @return
     */
    UserDetailVo getUser(WebLoginDto webLoginDto);

    /**
     * 登陆调用
     * 微信登陆信息获取用户
     * @param weChatLoginDto
     * @return
     */
    UserDetailVo getUser(WeChatLoginDto weChatLoginDto);

    /**
     * 插入新用户
     * @param userPo
     * @return
     */
    int insertUser(UserPo userPo);

    /**
     * 针对管理员添加用户接口
     * 用户数据体构建用户数据
     * @param userInsertDto
     * @return
     */
    int insertUser(UserInsertDto userInsertDto);

    /**
     * 通过account获取用户
     * @param account
     * @return
     */
    UserDetailVo getUserByAccount(String account);

    /**
     * 用户修改个人信息
     * @param updateUser
     * @param baseUser
     * @return
     */
    UserDetailVo userUpdateUser(UserPersonalUpdateDto updateUser, UserPo baseUser);

    /**
     * 管理员修改用户信息
     * @param updateUser
     * @return
     */
    UserDetailVo administerUpdateUser(UserAdministerUpdateDto updateUser);

    /**
     * 校验用户数据
     * 用户不能是超级管理员
     * 用户账号不能已经存在
     *
     * @param updateUser
     */
    void validateUser(UserAdministerUpdateDto updateUser);
}
